/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.edu.utfpr.view;

import br.edu.utfpr.dao.DaoProduto;
import javax.swing.JOptionPane;
import org.netbeans.api.settings.ConvertAsProperties;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.util.Exceptions;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;
import pojo.Produto;

/**
 * Top component which displays something.
 */
@ConvertAsProperties(dtd = "-//br.edu.utfpr.view//TelaProduto//EN",
autostore = false)
@TopComponent.Description(preferredID = "TelaProdutoTopComponent",
//iconBase="SET/PATH/TO/ICON/HERE", 
persistenceType = TopComponent.PERSISTENCE_ALWAYS)
@TopComponent.Registration(mode = "editor", openAtStartup = false)
@ActionID(category = "Window", id = "br.edu.utfpr.view.TelaProdutoTopComponent")
@ActionReference(path = "Menu/Window" /*
 * , position = 333
 */)
@TopComponent.OpenActionRegistration(displayName = "#CTL_TelaProdutoAction",
preferredID = "TelaProdutoTopComponent")
@Messages({
    "CTL_TelaProdutoAction=TelaProduto",
    "CTL_TelaProdutoTopComponent=TelaProduto Window",
    "HINT_TelaProdutoTopComponent=This is a TelaProduto window"
})
public final class TelaProdutoTopComponent extends TopComponent {

    Produto produto;
    Produto produtoAnterior;
    DaoProduto daoProduto;

    public TelaProdutoTopComponent() {
        produto = new Produto();
        produtoAnterior = new Produto();
        daoProduto = new DaoProduto();
        initComponents();
        setName(Bundle.CTL_TelaProdutoTopComponent());
        setToolTipText(Bundle.HINT_TelaProdutoTopComponent());

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btPesquisar = new javax.swing.JButton();
        btCancelar = new javax.swing.JButton();
        btEditar = new javax.swing.JButton();
        btExcluir = new javax.swing.JButton();
        btSalvar = new javax.swing.JButton();
        btNovo = new javax.swing.JButton();
        tfDescricao = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfMarca = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        cbUnMedida = new javax.swing.JComboBox();
        tfPreco = new javax.swing.JFormattedTextField();

        org.openide.awt.Mnemonics.setLocalizedText(btPesquisar, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btPesquisar.text")); // NOI18N
        btPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisarActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(btCancelar, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btCancelar.text")); // NOI18N
        btCancelar.setEnabled(false);
        btCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelarActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(btEditar, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btEditar.text")); // NOI18N
        btEditar.setEnabled(false);
        btEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btEditarActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(btExcluir, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btExcluir.text")); // NOI18N
        btExcluir.setEnabled(false);
        btExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btExcluirActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(btSalvar, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btSalvar.text")); // NOI18N
        btSalvar.setEnabled(false);
        btSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btSalvarActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(btNovo, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.btNovo.text")); // NOI18N
        btNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btNovoActionPerformed(evt);
            }
        });

        tfDescricao.setText(org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.tfDescricao.text")); // NOI18N
        tfDescricao.setEnabled(false);

        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.jLabel1.text")); // NOI18N

        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.jLabel2.text")); // NOI18N

        tfMarca.setText(org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.tfMarca.text")); // NOI18N
        tfMarca.setEnabled(false);

        org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.jLabel3.text")); // NOI18N

        org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(TelaProdutoTopComponent.class, "TelaProdutoTopComponent.jLabel4.text")); // NOI18N

        cbUnMedida.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Unidade", "Caixa", "Fardo", "Kg", "M", "M2", "M3", "L", "PCTE" }));
        cbUnMedida.setEnabled(false);

        tfPreco.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,###.00"))));
        tfPreco.setEnabled(false);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(54, 54, 54)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(tfDescricao)
                            .addComponent(tfMarca, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE)
                            .addComponent(cbUnMedida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tfPreco)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(btNovo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btSalvar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btExcluir)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btEditar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btPesquisar)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(tfDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(cbUnMedida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(tfMarca, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(tfPreco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btNovo)
                    .addComponent(btSalvar)
                    .addComponent(btExcluir)
                    .addComponent(btEditar)
                    .addComponent(btCancelar)
                    .addComponent(btPesquisar))
                .addContainerGap(13, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void btPesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPesquisarActionPerformed
        // TODO add your handling code here:
        Produto p = new TelaProdutoPequisa().getProdutoSelecionado();
        if (p != null) {
            produto = p;
            btEditar.setEnabled(true);
            btExcluir.setEnabled(true);
        }
        atualizaCampos();
    }//GEN-LAST:event_btPesquisarActionPerformed

    private void btCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelarActionPerformed
        // TODO add your handling code here:
        produto = produtoAnterior;
        atualizaCampos();

        btNovo.setEnabled(true);
        btSalvar.setEnabled(false);
        if (produto.getIdProduto() == null) {
            btExcluir.setEnabled(false);
            btEditar.setEnabled(false);
        } else {
            btExcluir.setEnabled(true);
            btEditar.setEnabled(true);
        }
        btCancelar.setEnabled(false);
        btPesquisar.setEnabled(true);

        travaCampos();
    }//GEN-LAST:event_btCancelarActionPerformed

    private void btEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditarActionPerformed
        // TODO add your handling code here:
        produtoAnterior = produto;

        btNovo.setEnabled(false);
        btSalvar.setEnabled(true);
        btExcluir.setEnabled(false);
        btEditar.setEnabled(false);
        btCancelar.setEnabled(true);
        btPesquisar.setEnabled(false);

        destravaCampos();
    }//GEN-LAST:event_btEditarActionPerformed

    private void btExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btExcluirActionPerformed
        // TODO add your handling code here:
        if (produto != null) {
            try {
                daoProduto.excluir(produto.getIdProduto());
                produto = new Produto();
                atualizaCampos();
            } catch (Exception ex) {
                Exceptions.printStackTrace(ex);
            }

            btNovo.setEnabled(true);
            btSalvar.setEnabled(false);
            btExcluir.setEnabled(false);
            btEditar.setEnabled(false);
            btCancelar.setEnabled(false);
            btPesquisar.setEnabled(true);

        }
    }//GEN-LAST:event_btExcluirActionPerformed

    private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSalvarActionPerformed
        // TODO add your handling code here:
        if (produto != null) {
            if (tfDescricao.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "A descrição do produto deve ser informada.");
            } else {
                produto.setDescricao(tfDescricao.getText());
                produto.setMarca(tfMarca.getText());
                if (tfPreco.getValue() != null) {
                    produto.setPrecoVenda(Double.parseDouble(tfPreco.getValue().toString()));
                } else {
                    produto.setPrecoVenda(0.0);
                }
                if (cbUnMedida.getSelectedItem() != null) {
                    produto.setUnidadeMedida(cbUnMedida.getSelectedItem().toString());
                } else {
                    produto.setUnidadeMedida(null);
                }
                if (produto.getQuantidadeEstoque() == null) {
                    produto.setQuantidadeEstoque(0.0);
                }

                produto = daoProduto.salvar(produto);

                btNovo.setEnabled(true);
                btSalvar.setEnabled(false);
                btExcluir.setEnabled(true);
                btEditar.setEnabled(true);
                btCancelar.setEnabled(false);
                btPesquisar.setEnabled(true);

                travaCampos();
            }
        }
    }//GEN-LAST:event_btSalvarActionPerformed

    private void btNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btNovoActionPerformed
        // TODO add your handling code here:
        produtoAnterior = produto;
        produto = new Produto();
        atualizaCampos();

        btNovo.setEnabled(false);
        btSalvar.setEnabled(true);
        btExcluir.setEnabled(false);
        btEditar.setEnabled(false);
        btCancelar.setEnabled(true);
        btPesquisar.setEnabled(false);

        destravaCampos();
    }//GEN-LAST:event_btNovoActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btCancelar;
    private javax.swing.JButton btEditar;
    private javax.swing.JButton btExcluir;
    private javax.swing.JButton btNovo;
    private javax.swing.JButton btPesquisar;
    private javax.swing.JButton btSalvar;
    private javax.swing.JComboBox cbUnMedida;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JTextField tfDescricao;
    private javax.swing.JTextField tfMarca;
    private javax.swing.JFormattedTextField tfPreco;
    // End of variables declaration//GEN-END:variables

    @Override
    public void componentOpened() {
        // TODO add custom code on component opening
    }

    @Override
    public void componentClosed() {
        // TODO add custom code on component closing
    }

    void writeProperties(java.util.Properties p) {
        // better to version settings since initial version as advocated at
        // http://wiki.apidesign.org/wiki/PropertyFiles
        p.setProperty("version", "1.0");
        // TODO store your settings
    }

    void readProperties(java.util.Properties p) {
        String version = p.getProperty("version");
        // TODO read your settings according to their version
    }

    public void atualizaCampos() {
        if (produto != null) {
            tfDescricao.setText(produto.getDescricao());
            tfMarca.setText(produto.getMarca());
            if (produto.getPrecoVenda() != null) {
                tfPreco.setText(produto.getPrecoVenda().toString());
            } else {
                tfPreco.setValue(0.0);
            }
            //if(produto.getUnidadeMedida() != null)    
            cbUnMedida.setSelectedItem(produto.getUnidadeMedida());

        }
    }

    public void travaCampos() {
        tfDescricao.setEnabled(false);
        tfPreco.setEnabled(false);
        tfMarca.setEnabled(false);
        cbUnMedida.setEnabled(false);
    }

    public void destravaCampos() {
        tfDescricao.setEnabled(true);
        tfPreco.setEnabled(true);
        tfMarca.setEnabled(true);
        cbUnMedida.setEnabled(true);
    }
}
